import axios from 'axios'
import { ElMessage } from 'element-plus';
import {LOCAL} from "@/utils/catch.js";

//设置JSON请求头
axios.defaults.headers.common['Content-Type'] = 'application/json;charset=utf-8'

//创建一个 Axios 实例。
const instance = axios.create({
    baseURL: import.meta.env.VITE_APP_BASE_API,
    timeout: 30000,
})


/**
 * 请求拦截器
 */
instance.interceptors.request.use(config => {
        //在请求头添加token
        if (config.headers.isToken !== false) {
            const token = LOCAL.get('token');

            if (token) {
                config.headers['token'] = token
            }
        }

        //在请求头添加appId
        if (config.headers.app_id !== false) {
            const app_id = LOCAL.get('app_id');

            if (app_id) {
                config.headers['app_id'] = app_id
            }
        }

        // 防止重复提交的逻辑
        if (config.headers.repeatSubmit === false) {
            // 具体的防止重复提交的实现可以根据需求来做
            console.log('防止重复提交逻辑');
        }
        return config
    },
    (error) => {
        // 对请求错误做些什么
        return Promise.reject(error);
    }
)

/**
 * 响应拦截器
 */
instance.interceptors.response.use(response => {
        if (response.data.code === 12001){
            ElMessage.error(response.data.msg)
            this.$router.push('/login')
        }
        if(response.data.code !=0){
            if (response.data.msg ==null || response.data.msg == ''){
                ElMessage.error("操作失败")
            }else {
                ElMessage.error(response.data.msg)
            }
        }
        return response
    },
    (error) => {
        // 对响应错误做些什么
        // if (error.response && error.response.status === 401) {
        //     // 未授权错误处理，例如重定向到登录页
        //     window.location.href = '/login';
        // }
        return Promise.reject(error);
    }
)

/**
 * 获取axios实例
 * @returns {AxiosInstance}
 */
export const getInstance = () => {
    return instance
}

/**
 *
 */
export const request = (method,url,data) => {
    return new Promise((resolve, reject) => {
        instance.request({
            method:method,
            url:url,
            data:data
        }).then(resp => {
            console.log("resp:"+resp)
            resp.data.code === 0 ? reject(resp.data) : reject({code: resp.data.code,message:resp.data.msg})
        }).catch(err => {
            reject(err)
        })
    })
}

// 导出 axios 实例
export default instance;



